Forked docker-compose config
This commit is contained in:
commit
1d755899e4
13 changed files with 246 additions and 0 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
.env
|
||||
*.kdev4
|
82
README.md
Normal file
82
README.md
Normal file
|
@ -0,0 +1,82 @@
|
|||
# MultiMC TeamCity bootstrapping docker thing!
|
||||
Docker compose config to create working [TeamCity](https://www.jetbrains.com/teamcity/) server with PostgreSQL
|
||||
|
||||
Based on [Egregors/teamcity-docker-compose](https://github.com/Egregors/teamcity-docker-compose) and modified for ... purposes.
|
||||
|
||||
Original license is GPL 3, but this is not interesting for actual redistribution. Go to the original source instead.
|
||||
|
||||
## Configuration
|
||||
|
||||
* Copy `env.example` as `.env`.
|
||||
* Set a decent Postgres username and password variables in `.env`
|
||||
* Don't push `.env`, obviously.
|
||||
|
||||
## Startup
|
||||
|
||||
Build images first:
|
||||
|
||||
```
|
||||
cd teamcity-docker-compose
|
||||
docker-compose build
|
||||
```
|
||||
|
||||
Then start the service:
|
||||
|
||||
```
|
||||
docker-compose up
|
||||
```
|
||||
|
||||
After initialisation Web Interface will be available on `https://teamcity.multimc.org/`, provided everything is set up correctly on CF and deth001.
|
||||
|
||||
### Setup DB
|
||||
|
||||
Open `https://teamcity.multimc.org/`
|
||||
|
||||
Set PostgreSQL as database type, upload [JDBC driver](https://jdbc.postgresql.org/download/postgresql-42.2.4.jar) into
|
||||
`/opt/teamcity/data/lib/jdbc/` then click «Refresh JDBC drivers»
|
||||
|
||||
![Alt text](raw/img/1.png?raw=true)
|
||||
|
||||
Configure DB connection:
|
||||
|
||||
![Alt text](raw/img/2.png?raw=true)
|
||||
|
||||
Authorize your Agent:
|
||||
|
||||
![Alt text](raw/img/3.png?raw=true)
|
||||
|
||||
## Backup / restore
|
||||
|
||||
You may use JetBrains way to [backup](https://confluence.jetbrains.com/display/TCD10/TeamCity+Data+Backup)
|
||||
or [restore](https://confluence.jetbrains.com/display/TCD10/Restoring+TeamCity+Data+from+Backup) your server
|
||||
|
||||
|
||||
## Update
|
||||
|
||||
If you see a notice that a new version is available, you may update your TeamCity that way:
|
||||
|
||||
```
|
||||
# build new version
|
||||
docker-compose build --pull --no-cache
|
||||
|
||||
# stop and remove old containers
|
||||
docker-compose stop
|
||||
docker-compose rm
|
||||
|
||||
# create and up new containers
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
After an update, you need to reauthorize your agents.
|
||||
|
||||
### Updating maintenance
|
||||
|
||||
Sometimes, during update you may get «maintenance is required» message instead of login page.
|
||||
It's ok! To login in a maintenance mode you need to enter an authentication token. You may find it in the logs:
|
||||
`docker-compose logs -f`
|
||||
|
||||
Try to find something like this:
|
||||
|
||||
```
|
||||
teamcity-server_1 | [TeamCity] Administrator can login from web UI using authentication token: 8755994969038184734
|
||||
```
|
23
docker-compose.yml
Normal file
23
docker-compose.yml
Normal file
|
@ -0,0 +1,23 @@
|
|||
version: '2'
|
||||
|
||||
services:
|
||||
|
||||
postgres:
|
||||
build: ./postgres
|
||||
volumes:
|
||||
- "/opt/teamcity/pg_data:/var/lib/postgresql/data"
|
||||
- "/opt/teamcity/pg_backup:/backups"
|
||||
env_file: .env
|
||||
restart: always
|
||||
|
||||
server:
|
||||
image: jetbrains/teamcity-server:latest
|
||||
volumes:
|
||||
- "/opt/teamcity/data:/data/teamcity_server/datadir"
|
||||
- "/opt/teamcity/logs:/opt/teamcity/logs"
|
||||
ports:
|
||||
- 8111:8111
|
||||
depends_on:
|
||||
- postgres
|
||||
env_file: .env
|
||||
restart: always
|
2
env.example
Normal file
2
env.example
Normal file
|
@ -0,0 +1,2 @@
|
|||
POSTGRES_PASSWORD=mysecretpass
|
||||
POSTGRES_USER=postgresuser
|
34
nginx-tc.conf
Normal file
34
nginx-tc.conf
Normal file
|
@ -0,0 +1,34 @@
|
|||
# Nginx vhost configuration for TeamCity
|
||||
|
||||
map $http_upgrade $connection_upgrade { # WebSocket support
|
||||
default upgrade;
|
||||
'' '';
|
||||
}
|
||||
|
||||
server {
|
||||
server_name teamcity.multimc.org;
|
||||
listen 80;
|
||||
|
||||
location / {
|
||||
proxy_pass http://localhost:8111;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-for $remote_addr;
|
||||
proxy_set_header X-Forwarded-Proto http;
|
||||
|
||||
proxy_set_header X-Forwarded-Host $http_host; # necessary for proper absolute redirects and TeamCity CSRF check
|
||||
proxy_set_header Upgrade $http_upgrade; # WebSocket support
|
||||
proxy_set_header Connection $connection_upgrade; # WebSocket support
|
||||
|
||||
proxy_max_temp_file_size 0;
|
||||
|
||||
proxy_connect_timeout 240;
|
||||
proxy_send_timeout 300;
|
||||
proxy_read_timeout 1200;
|
||||
|
||||
proxy_buffer_size 512k;
|
||||
proxy_buffers 32 4m;
|
||||
proxy_busy_buffers_size 25m;
|
||||
proxy_temp_file_write_size 10m;
|
||||
}
|
||||
}
|
13
postgres/Dockerfile
Normal file
13
postgres/Dockerfile
Normal file
|
@ -0,0 +1,13 @@
|
|||
FROM postgres:9.5
|
||||
|
||||
# Add backup scripts
|
||||
ADD backup.sh /usr/local/bin/backup
|
||||
ADD restore.sh /usr/local/bin/restore
|
||||
ADD list-backups.sh /usr/local/bin/list-backups
|
||||
|
||||
# Make them executable
|
||||
RUN chmod +x /usr/local/bin/restore
|
||||
RUN chmod +x /usr/local/bin/list-backups
|
||||
RUN chmod +x /usr/local/bin/backup
|
||||
|
||||
COPY set-pg-conf.sh /docker-entrypoint-initdb.d/set-config.sh
|
22
postgres/backup.sh
Normal file
22
postgres/backup.sh
Normal file
|
@ -0,0 +1,22 @@
|
|||
#!/bin/bash
|
||||
# stop on errors
|
||||
set -e
|
||||
|
||||
# we might run into trouble when using the default `postgres` user, e.g. when dropping the postgres
|
||||
# database in restore.sh. Check that something else is used here
|
||||
if [ "$POSTGRES_USER" == "postgres" ]
|
||||
then
|
||||
echo "creating a backup as the postgres user is not supported, make sure to set the POSTGRES_USER environment variable"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# export the postgres password so that subsequent commands don't ask for it
|
||||
export PGPASSWORD=$POSTGRES_PASSWORD
|
||||
|
||||
echo "creating backup"
|
||||
echo "---------------"
|
||||
|
||||
FILENAME=backup_$(date +'%Y_%m_%dT%H_%M_%S').sql
|
||||
pg_dump -h postgres -U $POSTGRES_USER >> /backups/$FILENAME
|
||||
|
||||
echo "successfully created backup $FILENAME"
|
4
postgres/list-backups.sh
Normal file
4
postgres/list-backups.sh
Normal file
|
@ -0,0 +1,4 @@
|
|||
#!/bin/bash
|
||||
echo "listing available backups"
|
||||
echo "-------------------------"
|
||||
ls /backups/
|
56
postgres/restore.sh
Normal file
56
postgres/restore.sh
Normal file
|
@ -0,0 +1,56 @@
|
|||
#!/bin/bash
|
||||
|
||||
# stop on errors
|
||||
set -e
|
||||
|
||||
# we might run into trouble when using the default `postgres` user, e.g. when dropping the postgres
|
||||
# database in restore.sh. Check that something else is used here
|
||||
if [ "$POSTGRES_USER" == "postgres" ]
|
||||
then
|
||||
echo "restoring as the postgres user is not supported, make sure to set the POSTGRES_USER environment variable"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# export the postgres password so that subsequent commands don't ask for it
|
||||
export PGPASSWORD=$POSTGRES_PASSWORD
|
||||
|
||||
# check that we have an argument for a filename candidate
|
||||
if [[ $# -eq 0 ]] ; then
|
||||
echo 'usage:'
|
||||
echo ' docker-compose run postgres restore <backup-file>'
|
||||
echo ''
|
||||
echo 'to get a list of available backups, run:'
|
||||
echo ' docker-compose run postgres list-backups'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# set the backupfile variable
|
||||
BACKUPFILE=/backups/$1
|
||||
|
||||
# check that the file exists
|
||||
if ! [ -f $BACKUPFILE ]; then
|
||||
echo "backup file not found"
|
||||
echo 'to get a list of available backups, run:'
|
||||
echo ' docker-compose run postgres list-backups'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "beginning restore from $1"
|
||||
echo "-------------------------"
|
||||
|
||||
# delete the db
|
||||
# deleting the db can fail. Spit out a comment if this happens but continue since the db
|
||||
# is created in the next step
|
||||
echo "deleting old database $POSTGRES_USER"
|
||||
if dropdb -h postgres -U $POSTGRES_USER $POSTGRES_USER
|
||||
then echo "deleted $POSTGRES_USER database"
|
||||
else echo "database $POSTGRES_USER does not exist, continue"
|
||||
fi
|
||||
|
||||
# create a new database
|
||||
echo "creating new database $POSTGRES_USER"
|
||||
createdb -h postgres -U $POSTGRES_USER $POSTGRES_USER -O $POSTGRES_USER
|
||||
|
||||
# restore the database
|
||||
echo "restoring database $POSTGRES_USER"
|
||||
psql -h postgres -U $POSTGRES_USER < $BACKUPFILE
|
8
postgres/set-pg-conf.sh
Normal file
8
postgres/set-pg-conf.sh
Normal file
|
@ -0,0 +1,8 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Set recommended for TeamCity settings
|
||||
# https://confluence.jetbrains.com/pages/viewpage.action?pageId=74847395#HowTo...-ConfigureNewlyInstalledPostgreSQLServer
|
||||
PG_CONF=/var/lib/postgresql/data/postgresql.conf
|
||||
|
||||
grep -q -F 'synchronous_commit=off' $PG_CONF || echo 'synchronous_commit=off' >> $PG_CONF
|
||||
grep -q -F 'shared_buffers=512MB' $PG_CONF || echo 'shared_buffers=512MB' >> $PG_CONF
|
BIN
raw/img/1.png
Normal file
BIN
raw/img/1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 139 KiB |
BIN
raw/img/2.png
Normal file
BIN
raw/img/2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 86 KiB |
BIN
raw/img/3.png
Normal file
BIN
raw/img/3.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 32 KiB |
Loading…
Reference in a new issue