Antonio De Lucreziis 686e009368 | 9 months ago | |
---|---|---|
public | 11 months ago | |
scripts | 11 months ago | |
src | 9 months ago | |
.dockerignore | 10 months ago | |
.env.sample | 10 months ago | |
.gitignore | 11 months ago | |
.prettierrc | 11 months ago | |
Dockerfile | 10 months ago | |
README.md | 10 months ago | |
astro.config.mjs | 11 months ago | |
docker-compose.yml | 10 months ago | |
package.json | 9 months ago | |
pnpm-lock.yaml | 9 months ago | |
tsconfig.json | 10 months ago |
README.md
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
# Build and start the container
docker compose up -d --build
# Then just do the following to start and stop
docker compose down
docker compose up -d
Updating
Just pull changes and update the docker image, then use the command from before to restart the main container.
git pull
docker compose up -d --build
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
Configuration
Everything is stored in the config.yaml
file. It can be updated directly or from the web interface.
This file contains a list of projects to deploy and the configuration for each one, here is an example
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
Schema of config.yaml
TODO