<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Lim Guan Ji</title>
    <description>The latest articles on DEV Community by Lim Guan Ji (@maxlimgj).</description>
    <link>https://dev.to/maxlimgj</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F135033%2F098cccf7-e622-410e-8a5e-745bfeb367c3.jpg</url>
      <title>DEV Community: Lim Guan Ji</title>
      <link>https://dev.to/maxlimgj</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/maxlimgj"/>
    <language>en</language>
    <item>
      <title>Setup your NGINX proxy manager</title>
      <dc:creator>Lim Guan Ji</dc:creator>
      <pubDate>Thu, 22 Jun 2023 13:47:27 +0000</pubDate>
      <link>https://dev.to/maxlimgj/setup-your-nginx-proxy-manager-9fh</link>
      <guid>https://dev.to/maxlimgj/setup-your-nginx-proxy-manager-9fh</guid>
      <description>&lt;p&gt;Hi Folks,&lt;br&gt;
If you guys are looking to do self hosting and are considering between Traefik and NGINX proxy manager, look no further.&lt;br&gt;
NGINX offers a good user experience to setup your very own self hosting environment.&lt;br&gt;
This guide will teach you how to setup NGINX as your proxy manager.&lt;/p&gt;

&lt;p&gt;First step&lt;br&gt;
Installation of docker on your Linux environment.&lt;br&gt;
[Docker Install documentation]&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffzt73lbye6yc09hwu4x4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffzt73lbye6yc09hwu4x4.png" alt="" width="480" height="127"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(&lt;a href="https://docs.docker.com/get-docker/" rel="noopener noreferrer"&gt;https://docs.docker.com/get-docker/&lt;/a&gt;)&lt;br&gt;
&lt;a href="https://docs.docker.com/compose/install/" rel="noopener noreferrer"&gt;Docker-Compose Install documentation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Depending on your OS, your download may vary, Redh8 does not support docker anymore, I would recommend &lt;a href="https://www.kali.org/docs/containers/installing-docker-on-kali/" rel="noopener noreferrer"&gt;Kali &lt;/a&gt;OS as I am using it.&lt;br&gt;
Verify that you have docker and docker-compose installed successfully.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;version: '3'
services:
  nginx:
    container_name: nginx
    image: 'jc21/nginx-proxy-manager:latest'
    restart: always
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - ./config.json:/app/config/production.json
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
  db:
    image: 'yobasystems/alpine-mariadb:latest'
    environment:
      MYSQL_ROOT_PASSWORD: 'npm'
      MYSQL_DATABASE: 'npm'
      MYSQL_USER: 'npm'
      MYSQL_PASSWORD: 'npm'
    volumes:
      - ./data/mysql:/var/lib/mysql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a docker-compose.yml file in your directory, run docker-compose up -d&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fayks9ez7ed2ertevnabv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fayks9ez7ed2ertevnabv.png" alt="" width="771" height="718"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Setup your router to have a Port Forwarding.&lt;br&gt;
In this case, I censored out my IP address and the ports that are exposed, you will require to expose your port to the public. Also get to know what is your public IP from &lt;a href="https://whatismyipaddress.com/" rel="noopener noreferrer"&gt;https://whatismyipaddress.com/&lt;/a&gt; and access via your exposed port. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2dp9izugyyubeq3vzhqy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2dp9izugyyubeq3vzhqy.png" alt="" width="726" height="517"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For your first login, please use the below credentials.&lt;br&gt;
You will be prompt to create a user thereafter.&lt;br&gt;
&lt;code&gt;admin@example.com&lt;br&gt;
changeme&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsowtvgqigdhjl26du3eh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsowtvgqigdhjl26du3eh.png" alt="" width="513" height="418"&gt;&lt;/a&gt;&lt;br&gt;
Lastly, setup your domain to be signed with an SSL cert&lt;/p&gt;

&lt;p&gt;Pls note, you will have to purchase a domain to get an SSL on your website.&lt;br&gt;
Happy self-hosting~&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Self Hosting WordPress</title>
      <dc:creator>Lim Guan Ji</dc:creator>
      <pubDate>Sat, 02 Jan 2021 09:12:46 +0000</pubDate>
      <link>https://dev.to/maxlimgj/self-hosting-wordpress-2pof</link>
      <guid>https://dev.to/maxlimgj/self-hosting-wordpress-2pof</guid>
      <description>&lt;p&gt;My latest obsession has been self-hosting ever since getting my Raspberry PI, I've began exploring docker compose files and setting them up.&lt;/p&gt;

&lt;p&gt;One of the useful resources that I look for to do self-hosting is from &lt;br&gt;
&lt;a href="https://hub.docker.com/" rel="noopener noreferrer"&gt;https://hub.docker.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of the amazing things about docker is the folder structure, here I can specify my own directory, making docker generate the files at the mention directories.&lt;/p&gt;

&lt;p&gt;Note that this docker compose is for raspberry pi setup, however it should also work for x86 systems as well.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;version: '3.1'

services:

  wordpress:
    container_name: wordpress
    image: wordpress
    restart: always
    ports:
      - 9005:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_NAME: exampledb
    volumes:
      - wordpress:/var/www/html

  db:
    image: mysql/mysql-server:latest
    restart: always
    environment:
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepass
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - db/var/lib/mysql

volumes:
  wordpress: /opt/containers/wordpress/html #Define your own path
  db: /opt/containers/wordpress/mysql #Define your own path
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>docker</category>
      <category>wordpress</category>
    </item>
    <item>
      <title>Traefik as a reverse proxy</title>
      <dc:creator>Lim Guan Ji</dc:creator>
      <pubDate>Sat, 02 Jan 2021 08:47:51 +0000</pubDate>
      <link>https://dev.to/maxlimgj/traefik-as-a-reverse-proxy-1d2b</link>
      <guid>https://dev.to/maxlimgj/traefik-as-a-reverse-proxy-1d2b</guid>
      <description>&lt;p&gt;This guide is about sharing how I setup Traefik as a reverse proxy with https connection&lt;/p&gt;

&lt;p&gt;1.Setup for apache2-utils to encrypt your password&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apt install apach2-utils
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fia0clai51t3a6ylpe2no.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fia0clai51t3a6ylpe2no.JPG" alt="Alt Text" width="800" height="37"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this Docker file, you can change several value to your custom domain needs, the comments briefly explains the usage of the configurations.&lt;/p&gt;

&lt;p&gt;Docker-Compose&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;version: '3'
services:
  traefik:
    image: traefik:latest
    container_name: traefik
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true #Prevents the UID transition while running a set UID binary
    networks:
      - proxy
    ports:
      - 80:80
      - 443:443
    volumes:
      - /etc/localtime:/etc/localtime:ro #Ensure that docker date matches server time
      - /var/run/docker.sock:/var/run/docker.sock:ro 
      - ./data/traefik.yml:/traefik.yml:ro #traefik configuration files
      - ./data/acme.json:/acme.json #to tell traefik to save ssl certs here
    command:
      --api.insecure=true # Enabling insecure api, NOT RECOMMENDED FOR PRODUCTION

    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.traefik.entrypoints=http"
      - "traefik.http.routers.traefik.rule=Host(`traefik.domain.com`)"
      - "traefik.http.middlewares.traefik-auth.basicauth.users= admin:@@$apr1@@$buoyPbo.@@$NOlqTVpSHfumf9lOiMYwI1" #Generated password
      - "traefik.http.middlewares.traefik-https-redirect.redirectscheme.scheme=https"
      - "traefik.http.routers.traefik.middlewares=traefik-https-redirect"
      - "traefik.http.routers.traefik-secure.entrypoints=https"
      - "traefik.http.routers.traefik-secure.rule=Host(`traefik.domain.com`)"
      - "traefik.http.routers.traefik-secure.middlewares=traefik-auth"
      - "traefik.http.routers.traefik-secure.tls=true"
      - "traefik.http.routers.traefik-secure.tls.certresolver=http"
      - "traefik.http.routers.traefik-secure.service=api@internal"
networks:
  proxy:
    external: true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;api:
  dashboard: true
entryPoints:
  http:
    address: ":80"
  https:
    address: ":443"
providers:
  docker:
    endpoint: "unix:///var/run/docker.sock"
    exposedByDefault: false
certificatesResolvers:
  http:
    acme:
      email: &amp;lt;&amp;lt;email.com&amp;gt;&amp;gt;
      storage: acme.json
      httpChallenge:
        entryPoint: http
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start docker container&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker-compose up -d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your good to go!!!&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fdsxcii4mq0utwn7bo733.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fdsxcii4mq0utwn7bo733.JPG" alt="Alt Text" width="800" height="522"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
