Skip to content

Commit de7b0c4

Browse files
committed
init commit
0 parents  commit de7b0c4

File tree

7 files changed

+204
-0
lines changed

7 files changed

+204
-0
lines changed

Diff for: .gitignore

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
*.swp
2+
*.pyc
3+
*.pyo
4+
*.pem

Diff for: README.md

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Docker Compose Dev Services
2+
## Services
3+
4+
* gogs - git
5+
* jenkins - ci/cd
6+
* docker registry
7+
https://docs.docker.com/registry/deploying/
8+
* pypiservice - pypi
9+
https://pypi.org/project/pypiserver/
10+
11+
## TODO
12+
13+
* nginx - create reverse proxy
14+
* jenkins - ssl configuration (might just reverse proxy)
15+
* docker registry - ssl configuration (might just reverse proxy)
16+
* docker registry - htpasswd.txt auth
17+
* pypiservice - htpasswd.txt auth
18+
* pypiservice - nginx reverse proxy

Diff for: docker-compose.yml

+82
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
version: "3.5"
2+
services:
3+
nginx:
4+
image: codeholics/nginx:latest
5+
build: ./nginx/
6+
ports:
7+
- "5150:5150"
8+
- "5151:5151"
9+
- "3000:3000"
10+
- "8675:8675"
11+
depends_on:
12+
- gogs
13+
- pypi
14+
- registry
15+
- jenkins
16+
networks:
17+
- front-tier
18+
volumes:
19+
- "nginx:/etc/nginx"
20+
- "certs:/certs"
21+
gogs:
22+
image: gogs/gogs
23+
ports:
24+
- "10022:22"
25+
volumes:
26+
- "gogs:/data"
27+
depends_on:
28+
- "postgresdb"
29+
external_links:
30+
- "postgresdb:postgresdb"
31+
networks:
32+
- front-tier
33+
- back-tier
34+
postgresdb:
35+
image: postgres
36+
volumes:
37+
- "postgres:/var/lib/postgresql/data"
38+
environment:
39+
- POSTGRES_USER=gogs
40+
- POSTGRES_PASSWORD=gogs
41+
networks:
42+
- back-tier
43+
pypi:
44+
image: codeholics/pypiservice:latest
45+
build: ./pypi/
46+
networks:
47+
- front-tier
48+
volumes:
49+
- "pypi:/packages"
50+
jenkins:
51+
image: codeholics/jenkins:python
52+
build: ./jenkins/
53+
volumes:
54+
- jenkins:/var/jenkins_home
55+
networks:
56+
front-tier:
57+
aliases:
58+
- jenkins
59+
registry:
60+
image: registry:2
61+
volumes:
62+
- registry:/var/lib/registry
63+
networks:
64+
- front-tier
65+
networks:
66+
front-tier:
67+
driver: overlay
68+
driver_opts:
69+
encrypted: "true"
70+
back-tier:
71+
driver: overlay
72+
driver_opts:
73+
encrypted: "true"
74+
volumes:
75+
postgres:
76+
gogs:
77+
pypi:
78+
registry:
79+
docker:
80+
jenkins:
81+
nginx:
82+
certs:

Diff for: jenkins/Dockerfile

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
FROM jenkins/jenkins:lts-alpine
2+
USER root
3+
RUN apk update \
4+
&& apk upgrade \
5+
&& apk add \
6+
make gcc python3 python3-dev musl-dev \
7+
openssl-dev libzip readline \
8+
&& pip3 install --upgrade pip tox pytest flake8 pylint
9+
10+
USER jenkins

Diff for: nginx/Dockerfile

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
FROM nginx:alpine
2+
RUN apk update && \
3+
apk upgrade && apk add openssl apache2-utils
4+
COPY ./conf.d/default.conf /etc/nginx/conf.d/default.conf
5+
COPY ./certs/* /certs/
6+
RUN htpasswd -b -c /etc/nginx/htpasswd root test123

Diff for: nginx/conf.d/default.conf

+74
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
server {
2+
listen 5151 ssl;
3+
server_name jenkins;
4+
5+
location / {
6+
proxy_pass http://jenkins:8080/;
7+
}
8+
ssl_certificate /certs/cert.pem;
9+
ssl_certificate_key /certs/key.pem;
10+
ssl_protocols TLSv1.2;
11+
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
12+
ssl_prefer_server_ciphers on;
13+
ssl_session_cache shared:SSL:20m;
14+
ssl_session_timeout 180m;
15+
add_header Strict-Transport-Security "max-age=31536000" always;
16+
}
17+
18+
server {
19+
listen 8675 ssl;
20+
server_name pypi;
21+
client_max_body_size 10M;
22+
auth_basic "PYPI Server";
23+
auth_basic_user_file /etc/nginx/htpasswd;
24+
25+
location / {
26+
proxy_set_header Host $host:$server_port;
27+
proxy_set_header X-Forwarded-Proto $scheme;
28+
proxy_set_header X-Real-IP $remote_addr;
29+
proxy_pass http://pypi:8675/;
30+
}
31+
ssl_certificate /certs/cert.pem;
32+
ssl_certificate_key /certs/key.pem;
33+
ssl_protocols TLSv1.2;
34+
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
35+
ssl_prefer_server_ciphers on;
36+
ssl_session_cache shared:SSL:20m;
37+
ssl_session_timeout 180m;
38+
add_header Strict-Transport-Security "max-age=31536000" always;
39+
}
40+
41+
server {
42+
listen 3000 ssl;
43+
server_name gogs;
44+
45+
location / {
46+
proxy_pass http://gogs:3000/;
47+
}
48+
ssl_certificate /certs/cert.pem;
49+
ssl_certificate_key /certs/key.pem;
50+
ssl_protocols TLSv1.2;
51+
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
52+
ssl_prefer_server_ciphers on;
53+
ssl_session_cache shared:SSL:20m;
54+
ssl_session_timeout 180m;
55+
add_header Strict-Transport-Security "max-age=31536000" always;
56+
}
57+
58+
server {
59+
listen 5150 ssl;
60+
server_name registry;
61+
client_max_body_size 1024M;
62+
63+
location / {
64+
proxy_pass http://registry:5000/;
65+
}
66+
ssl_certificate /certs/cert.pem;
67+
ssl_certificate_key /certs/key.pem;
68+
ssl_protocols TLSv1.2;
69+
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
70+
ssl_prefer_server_ciphers on;
71+
ssl_session_cache shared:SSL:20m;
72+
ssl_session_timeout 180m;
73+
add_header Strict-Transport-Security "max-age=31536000" always;
74+
}

Diff for: pypi/Dockerfile

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
FROM python:alpine
2+
ARG WORKERS
3+
ENV WORKERS 2
4+
ARG PORT
5+
ENV PORT 8675
6+
7+
RUN apk update && apk upgrade &&\
8+
pip install gunicorn pypiserver &&\
9+
mkdir /packages
10+
CMD /usr/local/bin/gunicorn --access-logfile "-" --workers $WORKERS --bind 0.0.0.0:$PORT 'pypiserver:app(root="/packages", authenticated=None)'

0 commit comments

Comments
 (0)