diff --git a/Jenkinsfile b/Jenkinsfile index da811bd..86ea8d1 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -9,8 +9,8 @@ pipeline { BASE_IMAGE_NAME = "jc21/nginx-proxy-manager-base" TEMP_IMAGE_NAME = "nginx-proxy-manager-build_${BUILD_NUMBER}" TEMP_IMAGE_NAME_ARM = "nginx-proxy-manager-arm-build_${BUILD_NUMBER}" - //TAG_VERSION = getPackageVersion() - TAG_VERSION = "preview" + TAG_VERSION = getPackageVersion() + MAJOR_VERSION = "2" } stages { stage('Prepare') { @@ -36,13 +36,17 @@ pipeline { // Private Registry sh 'docker tag $TEMP_IMAGE_NAME $DOCKER_PRIVATE_REGISTRY/$IMAGE_NAME:$TAG_VERSION' sh 'docker push $DOCKER_PRIVATE_REGISTRY/$IMAGE_NAME:$TAG_VERSION' + sh 'docker tag $TEMP_IMAGE_NAME $DOCKER_PRIVATE_REGISTRY/$IMAGE_NAME:$MAJOR_VERSION' + sh 'docker push $DOCKER_PRIVATE_REGISTRY/$IMAGE_NAME:$MAJOR_VERSION' // Dockerhub sh 'docker tag $TEMP_IMAGE_NAME docker.io/jc21/$IMAGE_NAME:$TAG_VERSION' + sh 'docker tag $TEMP_IMAGE_NAME docker.io/jc21/$IMAGE_NAME:$MAJOR_VERSION' withCredentials([usernamePassword(credentialsId: 'jc21-dockerhub', passwordVariable: 'dpass', usernameVariable: 'duser')]) { sh "docker login -u '${duser}' -p '$dpass'" sh 'docker push docker.io/jc21/$IMAGE_NAME:$TAG_VERSION' + sh 'docker push docker.io/jc21/$IMAGE_NAME:$MAJOR_VERSION' } sh 'docker rmi $TEMP_IMAGE_NAME' @@ -67,13 +71,17 @@ pipeline { // Private Registry sh 'docker tag $TEMP_IMAGE_NAME_ARM $DOCKER_PRIVATE_REGISTRY/$IMAGE_NAME:$TAG_VERSION-armhf' sh 'docker push $DOCKER_PRIVATE_REGISTRY/$IMAGE_NAME:$TAG_VERSION-armhf' + sh 'docker tag $TEMP_IMAGE_NAME_ARM $DOCKER_PRIVATE_REGISTRY/$IMAGE_NAME:$MAJOR_VERSION-armhf' + sh 'docker push $DOCKER_PRIVATE_REGISTRY/$IMAGE_NAME:$MAJOR_VERSION-armhf' // Dockerhub sh 'docker tag $TEMP_IMAGE_NAME_ARM docker.io/jc21/$IMAGE_NAME:$TAG_VERSION-armhf' + sh 'docker tag $TEMP_IMAGE_NAME_ARM docker.io/jc21/$IMAGE_NAME:$MAJOR_VERSION-armhf' withCredentials([usernamePassword(credentialsId: 'jc21-dockerhub', passwordVariable: 'dpass', usernameVariable: 'duser')]) { sh "docker login -u '${duser}' -p '$dpass'" sh 'docker push docker.io/jc21/$IMAGE_NAME:$TAG_VERSION-armhf' + sh 'docker push docker.io/jc21/$IMAGE_NAME:$MAJOR_VERSION-armhf' } sh 'docker rmi $TEMP_IMAGE_NAME_ARM' diff --git a/README.md b/README.md index 5b3797d..f8e7d5e 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ running at home or otherwise, including free SSL, without having to know too muc ---------- **WARNING: Version 2 a complete rewrite!** If you are using the `latest` docker tag and update to version 2 -without preparation, horrible things might happen. Refer to the [Migrating Documentation](doc/MIGRATING.md). +without preparation, horrible things might happen. Refer to the [Importing Documentation](doc/IMPORTING.md). ---------- @@ -22,7 +22,7 @@ without preparation, horrible things might happen. Refer to the [Migrating Docum - Easily create forwarding domains, redirections, streams and 404 hosts without knowing anything about Nginx - Free SSL using Let's Encrypt or provide your own custom SSL certificates - Access Lists and basic HTTP Authentication for your hosts -- -Advanced Nginx configuration available for super users- TODO +- Advanced Nginx configuration available for super users - User management, permissions and audit log @@ -41,9 +41,22 @@ Please consult the [installation instructions](doc/INSTALL.md) for a complete gu if you just want to get up and running in the quickest time possible, grab all the files in the `doc/example/` folder and run `docker-compose up -d` -## Migrating from Version 1? +## Importing from Version 1? -Here's a [guide for you to migrate your configuration](doc/MIGRATING.md). +Here's a [guide for you to migrate your configuration](doc/IMPORTING.md). You should definitely read the [installation instructions](doc/INSTALL.md) first though. + +**Why should I?** + +Version 2 has the following improvements: + +- Management security and multiple user access +- User permissions and visibility +- Custom SSL certificate support +- Audit log of changes +- Broken nginx config detection +- Multiple domains in Let's Encrypt certificates +- Wildcard domain name support (not available with a Let's Encrypt certificate though) +- It's super sexy ## Administration diff --git a/doc/IMPORTING.md b/doc/IMPORTING.md new file mode 100644 index 0000000..bfda516 --- /dev/null +++ b/doc/IMPORTING.md @@ -0,0 +1,57 @@ +## Importing from Version 1 + +Thanks for using Nginx Proxy Manager version 1. It sucked. + +But it worked. + +This guide will let your import your configuration from version 1 to version 2. + +**IMPORTANT: This will make changes to your `letsencrypt` folder and certificate files!** Make sure you back them up first. + + +### Link your previous folders in your new docker stack + +In version 1, the docker configuration asked for a `config` folder to be linked and a `letsencrypt` folder. However in version 2, the +configuration exists in the database, so the `config` folder is no longer required. However if you have this folder linked in a +version 2 stack, the application will automatically import that configuration the first time it finds it. + +Following the [example configuration](../example): + +```yaml +version: "3" +services: + app: + image: jc21/nginx-proxy-manager:2 + restart: always + ports: + - 80:80 + - 81:81 + - 443:443 + volumes: + - ./config.json:/app/config/production.json + - ./data:/data + - ./letsencrypt:/etc/letsencrypt # this is your previous letsencrypt folder + - ./config:/config # this is your previous config folder + depends_on: + - db + db: + image: mariadb + restart: always + environment: + MYSQL_ROOT_PASSWORD: "password123" + MYSQL_DATABASE: "nginxproxymanager" + MYSQL_USER: "nginxproxymanager" + MYSQL_PASSWORD: "password123" + volumes: + - ./data/mysql:/var/lib/mysql +``` + +After you start the stack, the import will begin just after database initialize. + +Some notes: +- After importing, a file is created in the `config` folder to signify that it has been imported and should not be imported again. +- Because no users previously existed in the version 1 config, the `admin@example.com` user will own all of the imported data. +- If you were crazy like me and used Nginx Proxy Manager version 1 to proxy the Admin interface behind a Access List, you should +really disable the access list for that proxy host in version 1 before importing in to version 2. The app doesn't like being behind basic +authentication and it's own internal authentication. If you forgot to do this before importing, just hit the admin interface directly +on port 81 to get around your basic authentication access list. diff --git a/doc/INSTALL.md b/doc/INSTALL.md index 16c7b1d..615424e 100644 --- a/doc/INSTALL.md +++ b/doc/INSTALL.md @@ -3,7 +3,7 @@ There's a few ways to configure this app depending on: - Whether you use `docker-compose` or vanilla docker -- Which architecture you're running it on (raspberry pi also supported) +- Which architecture you're running it on (raspberry pi also supported - Testers wanted!) ### Configuration File @@ -36,7 +36,7 @@ affect the login and session management of the application. If these keys change ### Database -This app doesn't come with a database, you have to provide one yourself. Currently `mysql` and `postgres` databases are supported. +This app doesn't come with a database, you have to provide one yourself. Currently only `mysql/mariadb` is supported. It's easy to use another docker container for your database also and link it as part of the docker stack. Here's an example: @@ -46,7 +46,10 @@ services: app: image: jc21/nginx-proxy-manager:2 restart: always - network_mode: host + ports: + - 80:80 + - 81:81 + - 443:443 volumes: - ./config.json:/app/config/production.json - ./data:/data @@ -76,7 +79,10 @@ services: app: image: jc21/nginx-proxy-manager:2 restart: always - network_mode: host + ports: + - 80:80 + - 81:81 + - 443:443 volumes: - ./config.json:/app/config/production.json - ./data:/data @@ -88,7 +94,9 @@ Vanilla Docker: ```bash docker run -d \ --name nginx-proxy-manager \ - --network host \ + -p 80:80 \ + -p 81:81 \ + -p 443:443 \ -v /path/to/config.json:/app/config/production.json \ -v /path/to/data:/data \ -v /path/to/letsencrypt:/etc/letsencrypt \ @@ -102,20 +110,11 @@ I have created a `armhf` docker container just for you. There may be issues with if you have issues please report them here. ```bash -# Postgres: -docker run -d \ - --name nginx-proxy-manager-db \ - --network host \ - -e POSTGRES_DB=nginxproxymanager \ - -e POSTGRES_USER=nginxproxymanager \ - -e POSTGRES_PASSWORD=password123 \ - -v /path/to/postgresql:/var/lib/postgresql/data \ - zsoltm/postgresql-armhf - -# NPM: docker run -d \ --name nginx-proxy-manager-app \ - --network host \ + -p 80:80 \ + -p 81:81 \ + -p 443:443 \ -v /path/to/config.json:/app/config/production.json \ -v /path/to/data:/data \ -v /path/to/letsencrypt:/etc/letsencrypt \ diff --git a/doc/MIGRATING.md b/doc/MIGRATING.md deleted file mode 100644 index 3409ec7..0000000 --- a/doc/MIGRATING.md +++ /dev/null @@ -1,3 +0,0 @@ -## Migrating from Version 1 - -TODO diff --git a/doc/example/docker-compose.yml b/doc/example/docker-compose.yml index e873a43..0df2960 100644 --- a/doc/example/docker-compose.yml +++ b/doc/example/docker-compose.yml @@ -3,12 +3,19 @@ services: app: image: jc21/nginx-proxy-manager:2 restart: always + ports: + - 80:80 + - 81:81 + - 443:443 volumes: - ./config.json:/app/config/production.json - ./data:/data - ./letsencrypt:/etc/letsencrypt depends_on: - db + environment: + # if you want pretty colors in your docker logs: + - FORCE_COLOR=1 db: image: mariadb restart: always