2020-03-05 16:09:03 +00:00
# Getting Started
## Prerequisites
- Docker
- docker-compose
- user added to docker group
2020-03-08 20:17:22 +00:00
## Bootstrap Containers for development
2020-03-05 16:09:03 +00:00
2020-03-08 20:17:22 +00:00
Clone and change directory to frappe_docker directory
2020-03-05 16:09:03 +00:00
```shell
git clone https://github.com/frappe/frappe_docker.git
cd frappe_docker
```
2020-03-08 20:17:22 +00:00
## Use VSCode Remote Containers extension
2020-03-05 16:09:03 +00:00
2020-03-08 20:17:22 +00:00
For most people getting started with Frappe development, the best solution is to use [ VSCode Remote - Containers extension ](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers ).
2020-03-06 01:15:54 +00:00
2020-03-09 16:13:13 +00:00
VSCode should automatically inquiry you to install the required extensions, that can also be installed manually as follows:
2020-03-08 20:17:22 +00:00
- Install Remote - Containers for VSCode
- through command line `code --install-extension ms-vscode-remote.remote-containers`
2020-03-09 16:13:13 +00:00
- clicking on the button at the following link: [Remote - Containers ](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers )
- searching for extension `ms-vscode-remote.remote-containers`
2020-03-08 20:17:22 +00:00
- Install Python for VSCode
- through command line `code --install-extension ms-python.python`
2020-03-09 16:13:13 +00:00
- clicking on the button at the following link: [install ](https://marketplace.visualstudio.com/items?itemName=ms-python.python )
- searching for extension `ms-python.python`
After the extensions are installed, you can:
2020-03-08 20:17:22 +00:00
- Open frappe_docker folder in VS Code.
- `code .`
2020-03-09 16:13:13 +00:00
- Launch the command, from Command Palette (Ctrl + Shift + P) `Execute Remote Containers : Reopen in Container` . You can also click in the bottom left corner to access the remote container menu.
2020-03-05 16:09:03 +00:00
Notes:
2020-03-08 20:17:22 +00:00
- The `development` directory is ignored by git. It is mounted and available inside the container. Create all your benches (installations of bench, the tool that manages frappe) inside this directory.
2020-03-08 20:29:17 +00:00
- nvm with node v12 and v10 is installed. Check with `nvm ls` . Node v12 is used by default.
2020-03-05 16:09:03 +00:00
2020-03-08 20:17:22 +00:00
### Setup first bench
Run the following commands in the terminal inside the container. You might need to create a new terminal in VSCode.
2020-03-05 16:09:03 +00:00
```shell
bench init --skip-redis-config-generation --frappe-branch version-12 frappe-bench
2020-04-16 23:34:22 +00:00
cd frappe-bench∏
2020-03-05 16:09:03 +00:00
```
2020-03-08 20:17:22 +00:00
### Setup hosts
2020-03-09 08:19:35 +00:00
We need to tell bench to use the right containers instead of localhost. Run the following commands inside the container:
2020-03-05 16:09:03 +00:00
```shell
bench set-mariadb-host mariadb
bench set-redis-cache-host redis-cache:6379
bench set-redis-queue-host redis-queue:6379
bench set-redis-socketio-host redis-socketio:6379
```
2020-03-08 20:17:22 +00:00
### Edit Honcho's Procfile
2020-03-05 16:09:03 +00:00
2020-03-08 20:29:17 +00:00
Honcho is the tool used by Bench to manage all the processes Frappe requires. Usually, these all run in localhost, but in this case, we have external containers for Redis. For this reason, we have to stop Honcho from trying to start Redis processes.
2020-03-08 20:17:22 +00:00
2020-03-10 13:58:06 +00:00
Open the Procfile file and remove the three lines containing the configuration from Redis, either by editing manually the file:
2020-03-05 16:09:03 +00:00
```shell
2020-03-08 20:17:22 +00:00
code Procfile
```
2020-03-10 13:58:06 +00:00
Or running the following command:
2020-03-08 20:17:22 +00:00
```shell
sed -i '/redis/d' ./Procfile
2020-03-05 16:09:03 +00:00
```
2020-03-08 20:17:22 +00:00
### Create a new site with bench
2020-03-05 16:09:03 +00:00
2020-04-16 23:34:22 +00:00
Your installation already includes a site for [localhost ](http://locahost:8000 )
2020-03-08 20:29:17 +00:00
You can create a new site with the following command:
2020-03-08 20:17:22 +00:00
```shell
bench new-site sitename
```
for example:
```shell
2020-04-16 23:34:22 +00:00
bench new-site mysite.localhost
2020-03-08 20:17:22 +00:00
```
2020-03-09 08:19:35 +00:00
The command will ask the MariaDB root password. The default root password is `123` .
2020-04-16 23:34:22 +00:00
This will create a new site and a `mysite.localhost` directory under `frappe-bench/sites` .
You may need to configure your system /etc/hosts if you're on Linux, Mac, or its Windows equivalent.
### Launching
To launch witho
```shell
bench new-site mysite.localhost
```
2020-03-08 20:17:22 +00:00
Your website will now be accessible on [localhost on port 8000 ](http://locahost:8000 )
2020-03-10 13:58:06 +00:00
### Set bench developer mode on the new site
To develop a new app, the last step will be setting the site into developer mode. Documentation is available at [this link ](https://frappe.io/docs/user/en/guides/app-development/how-enable-developer-mode-in-frappe ).
```shell
2020-04-16 23:34:22 +00:00
bench --site my.site set-config developer_mode 1
bench --site my.site clear-cache
```
### Install an app
To install an app we need to fetch it from the appropriate git repo, then install in on the appropriate site
```shell
bench get-app myapp https://github.com/myusername/myapp.git
bench --site my.site install-app myapp
2020-03-10 13:58:06 +00:00
```
2020-03-08 20:17:22 +00:00
### Fixing MariaDB issues after rebuilding the container
The `bench new-site` command creates a user in MariaDB with container IP as host, for this reason after rebuilding the container there is a chance that you will not be able to access MariaDB correctly with the previous configuration
2020-03-08 20:29:17 +00:00
The parameter `'db_name'@'%'` needs to be set in MariaDB and permission to the site database suitably assigned to the user.
2020-03-08 20:17:22 +00:00
2020-03-09 08:19:35 +00:00
This step has to be repeated for all sites available under the current bench.
Example shows the queries to be executed for site `localhost`
Open sites/localhost/site_config.json:
2020-03-08 20:17:22 +00:00
```shell
2020-03-09 08:19:35 +00:00
code sites/localhost/site_config.json
2020-03-08 20:17:22 +00:00
```
2020-03-05 16:09:03 +00:00
2020-03-08 20:17:22 +00:00
and take note of the parameters `db_name` and `db_password` .
2020-03-05 16:09:03 +00:00
2020-03-08 20:17:22 +00:00
Enter MariaDB Interactive shell:
2020-03-05 16:09:03 +00:00
```shell
mysql -uroot -p123 -hmariadb
```
2020-03-09 08:19:35 +00:00
Execute following queries replacing `db_name` and `db_password` with the values found in site_config.json.
2020-03-05 16:09:03 +00:00
```sql
2020-03-07 00:25:11 +00:00
UPDATE mysql.user SET Host = '%' where User = 'db_name'; FLUSH PRIVILEGES;
SET PASSWORD FOR 'db_name'@'%' = PASSWORD('db_password'); FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON `db_name` .* TO 'db_name'@'%'; FLUSH PRIVILEGES;
2020-03-08 20:17:22 +00:00
EXIT;
```
## Manually start containers
In case you don't use VSCode, you may start the containers manually with the following command:
```shell
docker-compose -f .devcontainer/docker-compose.yml up -d
```
And enter the interactive shell for the development container with the following command:
```shell
docker exec -e "TERM=xterm-256color" -w /workspace/development -it devcontainer_frappe_1 bash
2020-03-05 16:09:03 +00:00
```
### Visual Studio Code Python Debugging
2020-03-08 20:17:22 +00:00
To enable Python debugging inside Visual Studio Code, you must first install the `ms-python.python` extension inside the container.
2020-03-08 20:29:17 +00:00
- Click on the extension icon inside VSCode
2020-03-08 20:17:22 +00:00
- Search `ms-python.python`
- Click on `Install on Dev Container: Frappe Bench`
- Click on 'Reload'
We need to start bench separately through the VSCode debugger. For this reason, **instead** of running `bench start` you should run the following command inside the frappe-bench directory:
2020-03-05 16:09:03 +00:00
```shell
honcho start \
socketio \
watch \
schedule \
worker_short \
worker_long \
worker_default
```
2020-03-08 20:29:17 +00:00
This command starts all processes with the exception of Redis (which is already running in separate container) and the `web` process. The latter can can finally be started from the debugger tab of VSCode.