Compare commits
4 Commits
dev/patric
...
dev/lukas
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0f15e92d65 | ||
|
|
942affd5e5 | ||
|
|
02ba53724e | ||
|
|
d0bba3d3f8 |
141
EXTENSION.md
141
EXTENSION.md
@@ -1,8 +1,47 @@
|
||||
## Neue Ideenkarte anlegen
|
||||
1. DNS record ```<name>``` A 195.59.32.237 600s
|
||||
2. Nginx Weiterleitung in ```default.conf```:
|
||||
# Neue Ideenkarte anlegen
|
||||
|
||||
## Übersicht
|
||||
|
||||
| Variable | Bedeutung |
|
||||
|---|---|
|
||||
| `<name>` | Name der Kommune (z.B. `lohne`) |
|
||||
| `<ID>` | Eindeutige Port-ID für die Datenbank (z.B. `4` → Port `5434`) |
|
||||
| `<branch-name>` | Git-Branch des Frontend-Repos |
|
||||
|
||||
---
|
||||
|
||||
## Schritt 1 — DNS Record anlegen
|
||||
|
||||
Im DNS-Panel einen neuen A-Record anlegen:
|
||||
|
||||
| Feld | Wert |
|
||||
|---|---|
|
||||
| Name | `<name>` |
|
||||
| Typ | `A` |
|
||||
| Ziel | `195.59.32.237` |
|
||||
| TTL | `600s` |
|
||||
|
||||
> ⚠️ DNS muss vollständig propagiert sein, bevor Certbot in Schritt 3 ausgeführt wird.
|
||||
|
||||
Propagation prüfen:
|
||||
```bash
|
||||
dig <name>.endex-geodaten.de
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Schritt 2 — Nginx `default.conf` anpassen
|
||||
|
||||
### 2a — Subdomain in den Port-80-Block eintragen
|
||||
|
||||
```nginx
|
||||
server_name endex-geodaten.de www.endex-geodaten.de git.endex-geodaten.de lohne.endex-geodaten.de <name>.endex-geodaten.de localhost;
|
||||
```
|
||||
|
||||
### 2b — Neuen HTTPS-Server-Block hinzufügen
|
||||
|
||||
```nginx
|
||||
# WEBGIS <NAME>
|
||||
server {
|
||||
listen 443 ssl;
|
||||
server_name <name>.endex-geodaten.de;
|
||||
@@ -18,7 +57,7 @@ server {
|
||||
}
|
||||
|
||||
location ~ \.php$ {
|
||||
fastcgi_pass webgis-<name>-php:9000;
|
||||
fastcgi_pass webgis-<name>-php:9000;
|
||||
fastcgi_index index.php;
|
||||
include fastcgi_params;
|
||||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||
@@ -26,8 +65,34 @@ server {
|
||||
}
|
||||
```
|
||||
|
||||
3. Docker container für UI
|
||||
---
|
||||
|
||||
## Schritt 3 — SSL-Zertifikat erneuern
|
||||
|
||||
Da kein Wildcard-Zertifikat verwendet wird, muss das Cert neu ausgestellt werden:
|
||||
|
||||
```bash
|
||||
docker compose run --rm certbot certonly --webroot \
|
||||
--webroot-path=/var/www/certbot \
|
||||
-d endex-geodaten.de \
|
||||
-d www.endex-geodaten.de \
|
||||
-d git.endex-geodaten.de \
|
||||
-d lohne.endex-geodaten.de \
|
||||
-d <name>.endex-geodaten.de
|
||||
```
|
||||
|
||||
Nginx neu laden:
|
||||
```bash
|
||||
docker compose exec nginx nginx -s reload
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Schritt 4 — Docker Container in `docker-compose.yml` anlegen
|
||||
|
||||
### PHP/UI Container
|
||||
|
||||
```yaml
|
||||
webgis-<name>-php:
|
||||
build: php-docker/
|
||||
container_name: webgis-<name>-php
|
||||
@@ -38,41 +103,81 @@ server {
|
||||
- webgis-<name>-nw
|
||||
```
|
||||
|
||||
und Datenbank anlegen.
|
||||
### Datenbank Container
|
||||
|
||||
```
|
||||
webgis-<name>db:
|
||||
```yaml
|
||||
webgis-<name>-db:
|
||||
image: postgis/postgis:15-3.3
|
||||
container_name: webgis-<name>-db
|
||||
restart: always
|
||||
ports:
|
||||
- "127.0.0.1:543<ID>:5432" # inside the container always 5432
|
||||
environment:
|
||||
- POSTGRES_USER=${WEBGIS_DB_USER} # maybe go back to default username
|
||||
- POSTGRES_PASSWORD=${WEBGIS_DB_PW} # must be secure and unique
|
||||
- POSTGRES_DB=${WEBGIS_DB_NAME} #same as container name
|
||||
- POSTGRES_USER=${WEBGIS_<NAME>_DB_USER}
|
||||
- POSTGRES_PASSWORD=${WEBGIS_<NAME>_DB_PW}
|
||||
- POSTGRES_DB=${WEBGIS_<NAME>_DB_NAME}
|
||||
volumes:
|
||||
- ./webgis-<name>-data:/var/lib/postgresql/data
|
||||
networks:
|
||||
- webgis-<name>-nw
|
||||
```
|
||||
|
||||
4. nginx Volume für neue Stadt in ```docker-compose.yml``` anlegen
|
||||
```
|
||||
./webgis-<name>:/var/www/webgis-<name>
|
||||
### Netzwerk ergänzen
|
||||
|
||||
Unter dem `networks:` Block am Ende der `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
networks:
|
||||
webgis-<name>-nw:
|
||||
driver: bridge
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
5. Frontend source code nach ```webgis-<name>``` klonen
|
||||
## Schritt 5 — Nginx Volume ergänzen
|
||||
|
||||
Beim nginx-Service in `docker-compose.yml` das neue Volume eintragen:
|
||||
|
||||
```yaml
|
||||
volumes:
|
||||
- ./webgis-<name>:/var/www/webgis-<name>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Schritt 6 — Frontend Source Code klonen
|
||||
|
||||
```bash
|
||||
git submodule add -b <branch-name> https://git.endex-geodaten.de/lukas.uptmoor/webgis-<name>.git
|
||||
```
|
||||
|
||||
Jede Kommune sollte ein eigenes Repo kriegen, da Features am Anfang variieren.
|
||||
> Jede Kommune erhält ein eigenes Repo, da Features initial variieren können.
|
||||
|
||||
---
|
||||
|
||||
6. Mit der Datenbank verbinden über SSH-Tunnel
|
||||
## Schritt 7 — Container starten
|
||||
|
||||
```bash
|
||||
docker compose up -d webgis-<name>-php webgis-<name>-db
|
||||
```
|
||||
|
||||
Logs prüfen:
|
||||
```bash
|
||||
docker compose logs -f webgis-<name>-php
|
||||
docker compose logs -f webgis-<name>-db
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Schritt 8 — Datenbank vorbereiten
|
||||
|
||||
SSH-Tunnel öffnen:
|
||||
```bash
|
||||
ssh -L 5433:localhost:543<ID> root@endex-geodaten.de
|
||||
```
|
||||
und Datenbank für Anwendung vorbereiten.
|
||||
|
||||
Strukturen laden:
|
||||
|
||||
```bash
|
||||
docker exec -it webgis-<name>-db psql -U $POSTGRES_USER -d $POSTGRES_DB < migrations/001_initial_schema.sql
|
||||
```
|
||||
@@ -31,5 +31,6 @@ CREATE INDEX idx_comments_browser ON comments(browser_id);
|
||||
-- ---------------------------------------------------------------------
|
||||
ALTER TABLE contributions
|
||||
ADD COLUMN photo_path VARCHAR(255) DEFAULT NULL;
|
||||
ADD COLUMN comment_count INTEGER NOT NULL DEFAULT 0;
|
||||
|
||||
COMMENT ON COLUMN contributions.photo_path IS 'Relative Path to uploaded Photo. NULL = no Photo.';
|
||||
@@ -629,6 +629,14 @@ function handle_create_comment($input) {
|
||||
':content' => $input['content']
|
||||
]);
|
||||
|
||||
$stmt2 = $pdo->prepare("
|
||||
UPDATE contributions
|
||||
SET comment_count = comment_count + 1
|
||||
WHERE contribution_id = :cid;
|
||||
");
|
||||
|
||||
$stmt2->execute([':cid' => $input['contribution_id']]);
|
||||
|
||||
json_response([
|
||||
'message' => 'Comment created successfully.',
|
||||
'comment_id' => (int) $pdo->lastInsertId()
|
||||
@@ -656,6 +664,14 @@ function handle_delete_comment($input) {
|
||||
$stmt = $pdo->prepare("DELETE FROM comments WHERE comment_id = :id");
|
||||
$stmt->execute([':id' => $input['comment_id']]);
|
||||
|
||||
$stmt2 = $pdo->prepare("
|
||||
UPDATE contributions
|
||||
SET comment_count = comment_count - 1
|
||||
WHERE contribution_id = :cid;
|
||||
");
|
||||
|
||||
$stmt2->execute([':cid' => $input['contribution_id']]);
|
||||
|
||||
json_response(['message' => 'Comment deleted successfully.']);
|
||||
|
||||
} catch (PDOException $e) {
|
||||
|
||||
@@ -1105,6 +1105,14 @@ function loadComments(contributionId) {
|
||||
});
|
||||
|
||||
listContainer.innerHTML = html;
|
||||
|
||||
const count = response.comments.length;
|
||||
const header = document.querySelector('#comments-toggle-' + contributionId)?.closest('.popup-comments-header');
|
||||
if (header) {
|
||||
header.innerHTML = '<i class="fa-solid fa-comments"></i> Kommentare (' + count + ')' +
|
||||
' <i class="fa-solid fa-chevron-down popup-comments-toggle" id="comments-toggle-' + contributionId + '"></i>';
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user