2.3 KiB
phCD
Continuous Deployment for PHC projects.
Development
# First install the dependencies
$ pnpm install
# Run the local server
$ pnpm dev
# Build all
$ pnpm build
Production Setup
Run the following command to bootstrap a phCD instance. As this service doesn't have auth for now, it's strongly recommended to publish only on a local ip like 127.0.0.1
and then access directly or via an ssh tunnel (something like ssh -L 8080:127.0.0.1:8080 server
).
# Clone this repo
git clone https://git.phc.dm.unipi.it/phc/phcd
# Create config files and data folder
mkdir data.local
cp .env.sample .env
echo 'deploys: []' > config.yaml
# Built docker image
docker built . -t phcd
# Start container
docker run -d \
--name phcd \
--restart unless-stopped \
-p 127.0.0.1:8080:4321 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ./data.local:/app/data.local \
-v ./.env:/app/.env \
-v ./config.yaml:/app/config.yaml \
phcd
Updating
Just pull changes and update the docker image, then use the command from before to restart the main container.
git pull
docker stop phcd
docker rm phcd
docker built . -t phcd
TODO: Self-Updating
It should be possible to deploy itself using a git+dockerfile deployment. For now this is more complicated as this requires to stop itself and spawn a new docker container of itself.
Idea 1. Create another [...] if we want the volume to be a folder this cannot be easily doneself-update.Dockerfile
that also gets mounted /var/run/docker.sock
, this new container will then run the previous commands
Architecture
Everything is stored in the config.yaml
file. This file contains a list of projects to deploy and the configuration for each one.
deploys:
- name: project1
url: https://github.com/username/project1
ref:
type: branch
value: main
type: dockerfile
options:
ports:
- 80:8080
volumes:
- /var/www/html:/var/www/html
- name: project2
url: ssh://example.org/username/project2.git
ref:
type: commit
value: '1234567'
type: docker-compose
options:
path: ./docker-compose.yml # already the default
- name: project3
url: https://github.com/username/project3
type: shell
options:
path: ./deploy.sh # already the default